package com.fanxuankai.boot.upload;

import cn.hutool.core.util.StrUtil;
import com.fanxuankai.boot.upload.domain.Job;

/**
 * @author fanxuankai
 */
public interface UploadHandler<I, O> extends Processor<I, O>, Writer<O> {
    /**
     * 处理器名称
     *
     * @return /
     */
    default String getName() {
        return StrUtil.lowerFirst(StrUtil.subBefore(getClass().getSimpleName(),
                UploadHandler.class.getSimpleName(), true));
    }

    /**
     * 解析器
     *
     * @return /
     */
    Reader<I> reader();

    /**
     * 是否并行
     *
     * @return /
     */
    default boolean parallel() {
        return true;
    }

    /**
     * 处理策略
     *
     * @return /
     */
    default Strategy strategy() {
        return Strategy.PARTIAL_SUCCESS;
    }

    /**
     * 处理超时时间
     *
     * @return 毫秒数
     */
    default int timeout() {
        return 300000;
    }

    /**
     * 创建任务触发事件
     *
     * @param job 任务
     */
    default void onCreatedJob(Job job) {

    }

    /**
     * 任务完成触发事件
     *
     * @param job 任务
     */
    default void onCompletedJob(Job job) {

    }

    /**
     * 任务失败触发事件
     *
     * @param job 任务
     */
    default void onFailedJob(Job job) {

    }
}
